home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / DEMOS / HM2_DEMO / WIN_DEMO / WINDEMO.M next >
Encoding:
Text File  |  1992-12-21  |  14.6 KB  |  570 lines

  1. MODULE WinDemo;
  2.  
  3.     (*
  4.      * Demoprogramm zur Window-Library für Hänisch-Modula-2
  5.      *
  6.      * V 2.00 / 12.12.1992
  7.      * (c) Thomas Uhl
  8.      *)
  9.  
  10.     IMPORT
  11.         AES, appl, form, fsel, graf, menu, objc, rsrc, wind;
  12.     IMPORT
  13.         VDI, vsf, vs, vrt;
  14.     IMPORT
  15.         GEMDOS, In, String, System, SysVar, Terminal, TimeDate;
  16.     IMPORT
  17.         GrWin, TeWin, TuWin, VTWin, W, Win, WErr, WHandler, WInOut;
  18.     FROM SYSTEM IMPORT
  19.         ADR, CODE, LOAD;
  20.  
  21.     CONST
  22.         RULER      =     0;      (* Formular/Dialog *)
  23.  
  24.         TOOLS      =     1;      (* Formular/Dialog *)
  25.  
  26.         INFO         =     2;      (* Formular/Dialog *)
  27.         SWICON     =    11;      (* ICON in Baum INFO *)
  28.  
  29.         WMENU1     =     3;      (* Menuebaum *)
  30.         TINFO      =     8;      (* STRING in Baum WMENU1 *)
  31.         TQUIT      =    10;      (* STRING in Baum WMENU1 *)
  32.         T8POINT  =    12;      (* STRING in Baum WMENU1 *)
  33.         T9POINT  =    13;      (* STRING in Baum WMENU1 *)
  34.         T10POINT =    14;      (* STRING in Baum WMENU1 *)
  35.         T20POINT =    15;      (* STRING in Baum WMENU1 *)
  36.  
  37.         WMENU2     =     4;      (* Menuebaum *)
  38.         GINFO      =     8;      (* STRING in Baum WMENU2 *)
  39.         GSAVE      =    10;      (* STRING in Baum WMENU2 *)
  40.         GQUIT      =    12;      (* STRING in Baum WMENU2 *)
  41.         GNORMAL  =    14;      (* STRING in Baum WMENU2 *)
  42.         GTURTLE  =    15;      (* STRING in Baum WMENU2 *)
  43.  
  44.         MENU         =     5;      (* Menuebaum *)
  45.         MINFO      =     7;      (* STRING in Baum MENU *)
  46.         MCONSOLE =    16;      (* STRING in Baum MENU *)
  47.         MQUIT      =    18;      (* STRING in Baum MENU *)
  48.  
  49.     CONST
  50.         cTabSize = 2;
  51.         cStrLen = 256;
  52.         cShellP = 4F6H;
  53.         cCompA = W.tCompSet{W.Name, W.Closer, W.Fuller, W.Mover};
  54.         cCompB = W.tCompSet{W.Name..W.HSlider}-W.tCompSet{W.Info};
  55.  
  56.     TYPE
  57.         tpMForm = POINTER TO graf.tMForm;
  58.  
  59.     VAR
  60.         w0, w1, w2, w3, w4: W.tWin;
  61.         Id, Hdl, Xmin, Ymin, Xmax, Ymax, Planes: SHORTINT;
  62.         ScrMFDB, BufMFDB: VDI.tMFDB;
  63.         Font, FSize: SHORTINT;
  64.         MMenuTree, TMenuTree, GMenuTree, RulerTree, ToolTree, InfoTree: objc.tpTree;
  65.  
  66.         GraphType: SHORTINT;
  67.         FontSize: SHORTINT;
  68.  
  69.         File: In.tpFile;
  70.  
  71.         ShellP: LONGCARD;
  72.  
  73.  
  74.     PROCEDURE LoadPic;
  75.         VAR
  76.             FHandle: SHORTINT;
  77.     BEGIN
  78.         WITH BufMFDB DO
  79.             Addr := GEMDOS.Malloc (32000);
  80.             IF Addr = NIL THEN
  81.                 IF form.alert (1, "[3][ Nicht genügend | Arbeitsspeicher | vorhanden!][Abbruch]") = 0 THEN END;
  82.                 System.Abort (-1);
  83.             END;
  84.             W := 640;
  85.             H := 400;
  86.             WdWidth := 40;
  87.             Stand := 1;
  88.             NPlanes := 1;
  89.         END;
  90.         FHandle := GEMDOS.Fopen ("WINDEMO.PIC", GEMDOS.ReadOnly);
  91.         IF FHandle < 0 THEN
  92.             VOID (GEMDOS.Fclose (FHandle));
  93.             IF form.alert (1, "[3][ | |Wo ist WINDEMO.PIC?][Abbruch]") = 0 THEN END;
  94.             appl.exit ();
  95.             System.Abort (-1);
  96.         ELSE
  97.             IF GEMDOS.Fread (FHandle, 32000, BufMFDB.Addr) # 32000 THEN HALT END;
  98.             VOID (GEMDOS.Fclose (FHandle));
  99.         END;
  100.     END LoadPic;
  101.  
  102.  
  103.     PROCEDURE ShowText (Wi: W.tWin);
  104.     BEGIN
  105.         TeWin.WriteLn (Wi);
  106.         TeWin.WriteString (Wi, "                     Window-Library"); TeWin.WriteLn (Wi);
  107.         TeWin.WriteString (Wi, "                     =============="); TeWin.WriteLn (Wi);
  108.         TeWin.WriteString (Wi, "                        für HM2"); TeWin.WriteLn (Wi);
  109.         TeWin.WriteLn (Wi);
  110.         TeWin.WriteString (Wi, " Mit Hilfe der Window-Library für HM2 lassen sich Text-,"); TeWin.WriteLn (Wi);
  111.         TeWin.WriteString (Wi, " Grafik-, Turtle-, VT52- und Userdefined-Windows auf ein-"); TeWin.WriteLn (Wi);
  112.         TeWin.WriteString (Wi, " fache Weise erzeugen und verwalten."); TeWin.WriteLn (Wi);
  113.         TeWin.WriteString (Wi, " "); TeWin.WriteLn (Wi);
  114.         TeWin.WriteString (Wi, " Die Verwendung dieser Library ermöglicht eine absolut"); TeWin.WriteLn (Wi);
  115.         TeWin.WriteString (Wi, " auflösungsunabhängige Programmierung. Die entstehenden"); TeWin.WriteLn (Wi);
  116.         TeWin.WriteString (Wi, " Programme laufen dann auch auf sämtlichen Grafikkarten."); TeWin.WriteLn (Wi);
  117.         TeWin.WriteString (Wi, " Die Text-, Grafik-, und VT52-Fenster führen ihren Redraw"); TeWin.WriteLn (Wi);
  118.         TeWin.WriteString (Wi, " jeweils selbständig durch. "); TeWin.WriteLn (Wi);
  119.         TeWin.WriteString (Wi, " "); TeWin.WriteLn (Wi);
  120.         TeWin.WriteString (Wi, " Text-Windows haben einen eigenen Cursor. Dieses Fenster"); TeWin.WriteLn (Wi);
  121.         TeWin.WriteString (Wi, " läßt die Bewegung des Cursors über die Cursor-Tasten zu."); TeWin.WriteLn (Wi);
  122.         TeWin.WriteString (Wi, " Texteingaben werden direkt ausgegeben."); TeWin.WriteLn (Wi);
  123.         TeWin.WriteString (Wi, " "); TeWin.WriteLn (Wi);
  124.         TeWin.WriteString (Wi, " Eingabe: ");
  125.     END ShowText;
  126.  
  127.  
  128.     PROCEDURE Info;
  129.         VAR
  130.             Coord: AES.tRect;
  131.             Obj: SHORTINT;
  132.     BEGIN
  133.         form.center (InfoTree, Coord);
  134.         wind.update (wind.BegUpdate);
  135.         form.dial (form.Start, Coord, Coord);
  136.         objc.draw (InfoTree, 0, 8, Coord);
  137.         Obj := form.do (InfoTree, 0);
  138.         form.dial (form.Finish, Coord, Coord);
  139.         wind.update (wind.EndUpdate);
  140.         EXCL (InfoTree^[Obj].state, objc.Selected);
  141.     END Info;
  142.  
  143.  
  144.     PROCEDURE SaveMeta (Wi: W.tWin);
  145.     BEGIN
  146.         IF GrWin.OpenMeta (Wi) # 0 THEN
  147.             IF GraphType = GNORMAL THEN
  148.                 DrawGraphic (Wi, Xmax DIV 3, Ymax DIV 3);
  149.             ELSE
  150.                 DrawTurtle (Wi, 8, Xmax DIV 3, Ymax DIV 3);
  151.             END;
  152.             GrWin.CloseMeta (Wi);
  153.         END;
  154.     END SaveMeta;
  155.  
  156.  
  157.     PROCEDURE DrawTurtle (Wi: W.tWin; n, Xreso, Yreso: SHORTINT);
  158.         VAR
  159.             i: SHORTINT;
  160.  
  161.         PROCEDURE Vieleck (s, n: SHORTINT);
  162.             VAR
  163.                 i: SHORTINT;
  164.         BEGIN
  165.             FOR i := 1 TO n DO
  166.                 TuWin.Forward (Wi, s);
  167.                 TuWin.Right (Wi, 360 DIV n);
  168.             END;
  169.         END Vieleck;
  170.  
  171.     BEGIN
  172.         GrWin.Lock (Wi);
  173.         TuWin.PenDown (Wi);
  174.         FOR i := 1 TO n DO
  175.             Vieleck (Yreso DIV 6, n);
  176.             TuWin.Right (Wi, 360 DIV n);
  177.         END;
  178.         GrWin.Unlock (Wi);
  179.     END DrawTurtle;
  180.  
  181.  
  182.     PROCEDURE DrawGraphic (Wi: W.tWin; Xreso, Yreso: SHORTINT);
  183.         VAR
  184.             i, x, y: SHORTINT;
  185.     BEGIN
  186.         x := Xreso DIV 2;
  187.         y := Yreso DIV 2;
  188.         GrWin.Lock (Wi);
  189.         FOR i := 0 TO Xreso DIV 2 BY 2 DO
  190.             GrWin.Box (Wi, x-i, y-i, x+i, y+i);
  191.         END;
  192.         GrWin.Unlock (Wi);
  193.     END DrawGraphic;
  194.  
  195.  
  196.     PROCEDURE Call (VAR Cmd: ARRAY OF CHAR): SHORTINT;
  197.     BEGIN
  198.         IF ShellP = 0 THEN
  199.             RETURN -1;
  200.         ELSIF Cmd[0] = 0C THEN
  201.             RETURN 0;
  202.         END;
  203.         LOAD (ADR (Cmd), 0);
  204.         LOAD (ShellP, 8);
  205. (*\ONYX v2.00  21.12.92 20:20*)(*$D-*)
  206. (*14 bytes of MC68000 code*)
  207. CODE(048E7H,07F7EH);
  208. CODE(02F00H);
  209. CODE(04E90H);
  210. CODE(0588FH);
  211. CODE(04CDFH,07EFEH);
  212. (*$D=*)
  213. (*\=
  214.         movem.l     d1-d7/a1-a6,-(sp)
  215.         move.l        d0,-(sp)
  216.         jsr             (a0)
  217.         addq.l        #4,sp
  218.         movem.l     (sp)+,d1-d7/a1-a6
  219. \*)
  220.     END Call;
  221.  
  222. (*$E+*)
  223.     PROCEDURE RedrawProc (Wi: W.tWin; x1, y1, x2, y2: SHORTINT);
  224.         VAR
  225.             pxy: ARRAY [0..3] OF VDI.tPoint;
  226.             Col: ARRAY[0..1] OF SHORTINT;
  227.             Rect: AES.tRect;
  228.     BEGIN
  229.         Win.Work (Wi, Rect);
  230.         WITH Wi^ DO
  231.             WITH Rect DO
  232.                 pxy[0].x := Doc.x * UWidth + x1 - x;
  233.                 pxy[0].y := Doc.y * UHeight + y1 - y;
  234.                 pxy[1].x := Doc.x * UWidth + x2 - x;
  235.                 pxy[1].y := Doc.y * UHeight + y2 - y;
  236.                 pxy[2].x := x1;
  237.                 pxy[2].y := y1;
  238.                 pxy[3].x := x2;
  239.                 pxy[3].y := y2;
  240.             END;
  241.         END;
  242.         Col[0] := VDI.Black;
  243.         IF Planes > 1 THEN
  244.             Col[1] := VDI.Red;
  245.         ELSE
  246.             Col[1] := VDI.White;
  247.         END;
  248.         vs.clip (Hdl, FALSE, pxy);
  249.         vrt.cpyfm (Hdl, 1, pxy, BufMFDB, ScrMFDB, Col);
  250.     END RedrawProc;
  251.  
  252.  
  253.     PROCEDURE CloseProc (Wi: W.tWin);
  254.         VAR
  255.             dmy: SHORTINT;
  256.     BEGIN
  257.         Win.Close (w0);
  258.         TeWin.Close (w1);
  259.         TeWin.Close (w2);
  260.         TuWin.Close (w3);
  261.         VTWin.Close (w4);
  262.  
  263.         Win.Delete (w0);
  264.         TeWin.Delete (w1);
  265.         TeWin.Delete (w2);
  266.         TuWin.Delete (w3);
  267.         VTWin.Delete (w4);
  268.  
  269.         W.Exit;
  270.         dmy := menu.bar (MMenuTree, 0);
  271.         appl.exit;
  272.  
  273.         SysVar.setSysLong (cShellP, ShellP);
  274.         System.End;
  275.     END CloseProc;
  276.  
  277.     PROCEDURE VTCloseProc (Wi: W.tWin);
  278.     BEGIN
  279.         TuWin.Close (w4);
  280.     END VTCloseProc;
  281.  
  282.     PROCEDURE MouseProc (Wi: W.tWin; Mouse: W.tMouse);
  283.     BEGIN
  284.         GEMDOS.Cconout (7C);
  285.     END MouseProc;
  286.  
  287.     PROCEDURE VTMouseProc (Wi: W.tWin; Maus: W.tMouse);
  288.         VAR
  289.             str: ARRAY[0..10] OF CHAR;
  290.             Str: ARRAY[0..79] OF CHAR;
  291.     BEGIN
  292.         IF VTWin.RedirOn (Wi) THEN
  293.             str := "exit";
  294.             Terminal.WriteString ("VT52-Terminal-Emulation (VTWin)");
  295.             Terminal.WriteLn;
  296.             Terminal.WriteString ("(c) 1991 Thomas Uhl (mosys)");
  297.             Terminal.WriteLn; Terminal.WriteLn;
  298.             Terminal.WriteString ("Ende mit 'exit'.");
  299.             Terminal.WriteLn;
  300.             LOOP
  301.                 Terminal.WriteString ('> ');
  302.                 Terminal.ReadLn (Str);
  303.                 Terminal.WriteLn;
  304.                 IF String.Compare (Str, str) = 0 THEN
  305.                     EXIT;
  306.                 END;
  307.                 IF Call(Str) = 0 THEN END;
  308.             END;
  309.             VTWin.RedirOff (Wi);
  310.         END;
  311.     END VTMouseProc;
  312.  
  313.     PROCEDURE KeyProc (Wi: W.tWin; Key: W.tKey);
  314.     BEGIN
  315.         CASE Key.Scan OF
  316.             |72: (* Up *)
  317.                 Win.ScrollDown (Wi);
  318.             |80: (* Down *)
  319.                 Win.ScrollUp (Wi);
  320.             |75: (* Left *)
  321.                 Win.ScrollRight (Wi);
  322.             |77: (* Right *)
  323.                 Win.ScrollLeft (Wi);
  324.         ELSE
  325.             IF Key.Char = 33C THEN
  326.                 CloseProc (Wi);
  327.             END;
  328.         END;
  329.     END KeyProc;
  330.  
  331.     PROCEDURE TxtKeyProc (Wi: W.tWin; Key: W.tKey);
  332.     VAR
  333.     Ch: CHAR;
  334.     BEGIN
  335.         IF Key.Char = 15C THEN
  336.             TeWin.Write (Wi, 15C);
  337.             TeWin.Write (Wi, 12C);
  338.         ELSIF Key.Char = 33C THEN
  339.             CloseProc (Wi);
  340.         ELSIF Key.Scan = 72 THEN
  341.             TeWin.CursorUp (Wi);
  342.         ELSIF Key.Scan = 80 THEN
  343.             TeWin.CursorDown (Wi);
  344.         ELSIF Key.Scan = 75 THEN
  345.             TeWin.CursorLeft (Wi);
  346.         ELSIF Key.Scan = 77 THEN
  347.             TeWin.CursorRight (Wi);
  348.         ELSIF Key.Char = '-' THEN
  349.             Win.ScrollDown (Wi);
  350.         ELSIF Key.Char = '+' THEN
  351.             Win.ScrollUp (Wi);
  352.         ELSIF Key.Scan = 71 THEN
  353.             TeWin.BufClear (Wi);
  354.             Win.Redraw (Wi);
  355.         ELSE
  356.             TeWin.Write (Wi, Key.Char);
  357.         END;
  358.     END TxtKeyProc;
  359.  
  360.     PROCEDURE TMenuProc (Wi: W.tWin; WinSys: BOOLEAN; Title, Entry: SHORTINT);
  361.     BEGIN
  362.         Win.MenuCheck (Wi, FontSize, FALSE);
  363.         CASE Entry OF
  364.             |TINFO:
  365.                 Info;
  366.             |TQUIT:
  367.                 CloseProc (Wi);
  368.             |T8POINT:
  369.                 FontSize := T8POINT;
  370.                 FSize := 8;
  371.                 TeWin.SetFont (Wi, Font, FSize);
  372.             |T9POINT:
  373.                 FontSize := T9POINT;
  374.                 FSize := 9;
  375.                 TeWin.SetFont (Wi, Font, FSize);
  376.             |T10POINT:
  377.                 FontSize := T10POINT;
  378.                 FSize := 10;
  379.                 TeWin.SetFont (Wi, Font, FSize);
  380.             |T20POINT:
  381.                 FontSize := T20POINT;
  382.                 FSize := 20;
  383.                 TeWin.SetFont (Wi, Font, FSize);
  384.         ELSE
  385.         END;
  386.         Win.MenuCheck (Wi, FontSize, TRUE);
  387.         Win.MenuTitleNormal (Wi, Title);
  388.     END TMenuProc;
  389.  
  390.     PROCEDURE GMenuProc (Wi: W.tWin; WinSys: BOOLEAN; Title, Entry: SHORTINT);
  391.     BEGIN
  392.         CASE Entry OF
  393.             |GINFO:
  394.                 Info;
  395.             |GSAVE:
  396.                 SaveMeta (Wi);
  397.             |GTURTLE:
  398.                 Win.MenuCheck (Wi, GraphType, FALSE);
  399.                 GraphType := GTURTLE;
  400.                 Win.MenuCheck (w3, GraphType, TRUE);
  401.                 GrWin.Clear (Wi);
  402.                 DrawTurtle (Wi, 8, Xmax DIV 3, Ymax DIV 3);
  403.             |GNORMAL:
  404.                 Win.MenuCheck (Wi, GraphType, FALSE);
  405.                 GraphType := GNORMAL;
  406.                 Win.MenuCheck (w3, GraphType, TRUE);
  407.                 GrWin.Clear (Wi);
  408.                 DrawGraphic (Wi, Xmax DIV 3, Ymax DIV 3);
  409.             |GQUIT:
  410.                 CloseProc (Wi);
  411.         ELSE
  412.         END;
  413.         Win.MenuTitleNormal (Wi, Title);
  414.     END GMenuProc;
  415.  
  416.     PROCEDURE MMenuProc (Wi: W.tWin; WinSys: BOOLEAN; Title, Entry: SHORTINT);
  417.     BEGIN
  418.         CASE Entry OF
  419.             |MINFO:
  420.                 Info;
  421.             |MCONSOLE:
  422.                 VTWin.Open (w4, Xmax DIV 10, Ymax DIV 5);
  423.             |MQUIT:
  424.                 CloseProc (Wi);
  425.         ELSE
  426.         END;
  427.         menu.tnormal (MMenuTree, Title, TRUE);
  428.     END MMenuProc;
  429.  
  430.     PROCEDURE TimerProc (Wi: W.tWin);
  431.         VAR
  432.             Time: TimeDate.tTime;
  433.     BEGIN
  434.         TimeDate.CardToTime (GEMDOS.Tgettime (), Time);
  435.         TeWin.SetCursor (Wi, 2, 1);
  436.         WInOut.WriteInt (Wi, Time.hour, 2); WInOut.Write (Wi, ':');
  437.         WInOut.WriteInt (Wi, Time.min DIV 10, 1);
  438.         WInOut.WriteInt (Wi, Time.min MOD 10, 1); WInOut.Write (Wi,':');
  439.         WInOut.WriteInt (Wi, Time.sec DIV 10, 1);
  440.         WInOut.WriteInt (Wi, Time.sec MOD 10, 1);
  441.     END TimerProc;
  442.  
  443.     PROCEDURE BorderProc (Wi: W.tWin; Border: W.tBorder; Mouse: W.tMouse;
  444.                                                 Tree: objc.tpTree; Obj: SHORTINT);
  445.         VAR
  446.             Mx, My: SHORTINT;
  447.             Button, Key: BITSET;
  448.     BEGIN
  449.         IF Win.Topped () = Wi THEN
  450.             IF Tree # NIL THEN
  451.                 objc.change (Tree, Obj, Wi^.ARect, {objc.Selected}, TRUE);
  452.             END;
  453.             REPEAT
  454.                 graf.mkstate (Mx, My, Button, Key);
  455.             UNTIL Button = {};
  456.             IF Tree # NIL THEN
  457.                 objc.change (Tree, Obj, Wi^.ARect, {}, TRUE);
  458.             END;
  459.         END;
  460.     END BorderProc;
  461. (*$E-*)
  462.  
  463. (*$E-*)(*$D-*)(*$S-*)
  464.     PROCEDURE DefMForm;
  465.     BEGIN;
  466.         CODE(00007H,00008H,00001H,00000H,00001H,03FE0H,03FE0H,03FE0H);
  467.         CODE(03FF0H,01FF8H,07FFEH,07FFEH,07FFFH,03FFFH,03FFEH,01FFEH);
  468.         CODE(0FFFEH,0FFFEH,0FFFEH,03FF8H,01FF0H,00000H,01240H,01240H);
  469.         CODE(00920H,00920H,00000H,03FFCH,03FFAH,01FF2H,01FFCH,00FE0H);
  470.         CODE(007C0H,07FFCH,03FF8H,01FF0H,00000H); (*$P+*)
  471.     END DefMForm;
  472. (*$P-*)(*$D=*)
  473.  
  474.     VAR
  475.         dmy: SHORTINT;
  476.  
  477. BEGIN
  478.  
  479.     ShellP := SysVar.getSysLong (cShellP);
  480.  
  481.     Id := appl.init();
  482.     IF Id = -1 THEN
  483.         System.End;
  484.     END;
  485.  
  486.     LoadPic;
  487.     IF NOT rsrc.load ("WINDEMO.RSC") THEN
  488.         IF form.alert (1, "[3][ |Resource-Datei|  BIGDEMO.RSC  |nicht gefunden!][Abort]") = 0 THEN END;
  489.         System.End;
  490.     END;
  491.     rsrc.gaddr (rsrc.Tree, RULER, RulerTree);
  492.     rsrc.gaddr (rsrc.Tree, TOOLS, ToolTree);
  493.     rsrc.gaddr (rsrc.Tree, INFO, InfoTree);
  494.     rsrc.gaddr (rsrc.Tree, WMENU1, TMenuTree);
  495.     rsrc.gaddr (rsrc.Tree, WMENU2, GMenuTree);
  496.     rsrc.gaddr (rsrc.Tree, MENU, MMenuTree);
  497.  
  498.     dmy := menu.bar (MMenuTree, 1);
  499.  
  500.     IF NOT W.Init (1, Hdl, Xmin, Ymin, Xmax, Ymax) THEN HALT END;
  501.  
  502.     IF WHandler.SetGlobMenuProc (TRUE, MMenuProc) THEN END;
  503.  
  504.     W.ScrInfo (Planes, ScrMFDB);
  505.  
  506.     Win.Create (w0, 80, 50, 8, 8, cCompB, RedrawProc);
  507.     Win.SetName (w0, " Userdefined Window ");
  508.     Win.SetBorderTree (w0, W.Left, ToolTree);;
  509.     IF WHandler.SetBorderProc (w0, TRUE, BorderProc) THEN END;
  510.     IF WHandler.SetCloseProc (w0, TRUE, CloseProc) THEN END;
  511.     IF WHandler.SetMouseProc (w0, TRUE, MouseProc) THEN END;
  512.     IF WHandler.SetKeyProc (w0, TRUE, KeyProc) THEN END;
  513.     Win.Open (w0, Xmax*5 DIV 10, Ymax DIV 20, Xmax*3 DIV 60, Ymax DIV 20);
  514.     Win.Pos (w0, 10, 12);
  515.  
  516.     Font := 1; FSize := 10;
  517.     TeWin.Create (w1, 80, 25, 1000, cCompB + W.tCompSet{W.Info}, Font, FSize);
  518.     Win.SetName (w1, " Text-Window ");
  519.     Win.SetBorderTree (w1, W.Head, RulerTree);
  520.     IF Win.SetMenu (w1, TMenuTree) THEN END;
  521.     IF WHandler.SetMenuProc (w1, TRUE, TMenuProc) THEN END;
  522.     IF WHandler.SetCloseProc (w1, TRUE, CloseProc) THEN END;
  523.     IF WHandler.SetMouseProc (w1, TRUE, TeWin.SelMouseProc) THEN END;
  524.     IF WHandler.SetMouseProc (w1, TRUE, MouseProc) THEN END;
  525.     IF WHandler.SetKeyProc (w1, TRUE, TxtKeyProc) THEN END;
  526.     TeWin.Open (w1, Xmax*9 DIV 640, Ymax*3 DIV 15, Xmax*3 DIV 64, Ymax DIV 40);
  527.     FontSize := T10POINT;
  528.     Win.MenuCheck (w1, FontSize, TRUE);
  529.  
  530.     Font := 1; FSize := 10;
  531.     TeWin.Create (w2, 12, 3, 3, cCompA, Font, FSize);
  532.     Win.SetName (w2, " Watch ");
  533.     Win.SetMouse (w2, 255, tpMForm (DefMForm)^);
  534.     IF WHandler.SetCloseProc (w2, TRUE, CloseProc) THEN  END;
  535.     IF WHandler.SetMouseProc (w2, TRUE, MouseProc) THEN END;
  536.     IF WHandler.SetTimerProc (w2, TRUE, 200, TimerProc) THEN END;
  537.     TeWin.Open (w2, Xmax*5 DIV 64, Ymax DIV 15, 12, 3);
  538.  
  539.     TuWin.Create (w3, Xmax DIV 3, Ymax DIV 3, cCompB);
  540.     Win.SetName (w3, "Turtle-Window");
  541.     IF Win.SetMenu (w3, GMenuTree) THEN END;
  542.     IF WHandler.SetMenuProc (w3, TRUE, GMenuProc) THEN END;
  543.     IF WHandler.SetCloseProc (w3, TRUE, CloseProc) THEN END;
  544.     IF WHandler.SetMouseProc (w3, TRUE, MouseProc) THEN END;
  545.     IF WHandler.SetKeyProc (w3, TRUE, KeyProc) THEN END;
  546.     TuWin.Open (w3, Xmax DIV 2, Ymax*5 DIV 9);
  547.     GraphType := GTURTLE;
  548.     Win.MenuCheck (w3, GraphType, TRUE);
  549.  
  550.     Font := 1;
  551.     FSize := (Ymax+1) DIV 50;
  552.     IF FSize > 12 THEN
  553.         FSize := 12;
  554.     END;
  555.     VTWin.Create (w4, 80, 25, cCompB, Font, FSize);
  556.     Win.SetName (w4, "Console");
  557.     IF WHandler.SetCloseProc (w4, TRUE, VTCloseProc) THEN END;
  558.     IF WHandler.SetMouseProc (w4, TRUE, VTMouseProc) THEN END;
  559.  
  560.     DrawTurtle (w3, 8, Xmax DIV 3, Ymax DIV 3);
  561.  
  562.     ShowText (w1);
  563.     TeWin.CursorOn (w1);
  564.  
  565.     graf.mouseform (graf.Arrow);
  566.  
  567.     WHandler.MainLoop;
  568.  
  569. END WinDemo.
  570.